package sample.xiaosong.violentrecursion;

/**
 * 打印一个字符串的所有子串
 */
public class PrintAllSubString {

    /**
     * 输出一个字符串的所有子串
     * @param str 字符串
     */
    public static void printAllSubString(String str) {
        char[] chars = str.toCharArray();
        process(chars, 0);
    }

    /**
     * 递归函数
     * @param chars 字符串数组
     * @param i 第i个字符
     */
    public static void process(char[] chars, int i) {
        // 边界条件为i达到了字符串最后一位
        if (i == chars.length) {
            System.out.println(String.valueOf(chars));
            return;
        }
        // 对于任何一个字符，他都是两种选择  1、保留自己进入递归   2、删除自己进入递归
        process(chars, i + 1);
        char c = chars[i];
        chars[i] = 0;
        process(chars, i + 1);
        // 删除的字符要还原
        chars[i] = c;
    }

    public static void main(String[] args) {
        String str = "abc";
        printAllSubString(str);
    }
}
